// pages/roleMsg/stuRole/stuRole.js
let app = getApp().globalData
// 姓名正则
let nameRegExp = /^[\u4e00-\u9fa5]{2,4}$/
// 电话正则
let phoneRegExp = /^\d{11}$/
// 学号的正则
let student_idRegExp = /^\d{8}$/
// 节流函数
function throttle(func, delay) {
  let timer = null;
  return function () {
    if (!timer) {
      timer = setTimeout(() => {
        func.apply(this, arguments);
        timer = null;
      }, delay);
    }
  };
};
// 防抖函数
function debounce(func, delay) {
  let timer = null;
  return function () {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, arguments);
    }, delay);
  };
};

Page({
  /**
   * 页面的初始数据
   */
  data: {
    error_username: null,
    error_phone: null,
    error_student_id: null,
    schoolPopup: false,
    columns: [],
    res_data: [],
    operate: null,
    options: [],
    active: 1,
    steps: [{
        text: '步骤一',
        desc: '身份选择',
      },
      {
        text: '步骤二',
        desc: '个人信息填写',
      },
      {
        text: '步骤三',
        desc: '提交审核',
      },
    ],
    userInfo: {},
    cascaderValue: "",
    showPopup: false,
  },
  async to_(e) {
    let bool = e.currentTarget.dataset.to
    if (bool) {
      // 上一步
      wx.navigateBack(-1)
      return;
    }
    // 下一步
    // 先验证是否都填完整相关信息
    if (!nameRegExp.test(this.data.userInfo.username) && !phoneRegExp.test(this.data.userInfo.phone) && !student_idRegExp.test(this.data.userInfo.student_id)) {
      wx.showToast({
        title: '请按正确格式填完整表单！',
        icon: 'none'
      })
      return;
    };
    // 验证选择项是否为空
    if (this.data.userInfo.address_name == null &&
      this.data.userInfo.school_name == null &&
      this.data.userInfo.college_name == null &&
      this.data.userInfo.college_name == null) {
      wx.showToast({
        title: '请按正确格式填完整表单！',
        icon: 'none'
      })
      return;
    }
    try {
      // 验证名字是否同名 同工号
      // 检查数据库中是否有这个人名
      let res = await getApp().$axios("/getUserName?username=" + this.data.userInfo.username, 'GET');
      if (res.data) {
        // 表示数据库中有这个人
        this.setData({
          error_username: '名字已存在，请联系管理员。',
        });
        return;
      };
      // 检查学号是否重复
      let json = await getApp().$axios("/getStudent_id?id=" + this.data.userInfo.student_id, "GET")
      if (json.data) {
        // 表示数据库中存在这个工号
        this.setData({
          error_student_id: '学号已存在，请联系管理员。'
        });
        return;
      }
      // 什么大问题都没有放行
      wx.navigateTo({
        url: '/subpacks/pages_first/examine/facialinput/facialinput',
      })
    } catch (error) {
      wx.showToast({
        title: result.msg,
        icon: 'error'
      })
    }
  },
  // 使用节流函数处理数据收集
  myChange: debounce(async function (e) {
      let field = e.currentTarget.dataset.field;
      let value = e.detail;
      // 验证 姓名 电话 工号
      switch (field) {
        case 'username':
          if (nameRegExp.test(`${value}`)) {
            console.log("成功");
            // 检查数据库中是否有这个人名
            let res = await getApp().$axios("/getUserName?username=" + value, 'GET');
            if (res.data) {
              // 表示数据库中有这个人
              this.setData({
                error_username: '名字已存在，请联系管理员。'
              });
              break;
            }
            this.setData({
              error_username: ''
            })
            break;
          }
          // 不成功
          console.log("不成功");
          this.setData({
            error_username: '请输入2~4个汉字'
          })
          break;
        case 'phone':
          if (phoneRegExp.test(value - 0)) {
            this.setData({
              error_phone: ''
            });
            break;
          }
          this.setData({
            error_phone: "请输入11位数的号码"
          })
          break;
        default:
          if (student_idRegExp.test(value - 0)) {
            // 匹配成功
            // 检查学号是否重复
            let json = await getApp().$axios("/getStudent_id?id=" + value, "GET")
            if (json.data) {
              // 表示数据库中存在这个工号
              this.setData({
                error_student_id: '学号已存在，请联系管理员。'
              });
              break;
            }
            this.setData({
              error_student_id: ''
            })
            break;
          }
          // 匹配失败
          this.setData({
            error_student_id: '请输入正确的学号'
          });
          break;
      }
      app.userInfo[e.currentTarget.dataset.field] = value
      this.setData({
        userInfo: app.userInfo
      });
    }, 500) // 设置节流的时间间隔为500毫秒
    ,
  // 打开popup
  async onClick() {
    wx.showLoading({
      title: '加载中~',
    })
    this.setData({
      showPopup: !this.data.showPopup
    })
    try {
      let res = await getApp().$axios('/getAddress', 'GET')
      console.log(res);
      wx.hideLoading()
      // 获取数据出问题
      if (res.status !== 200) {
        wx.showToast({
          title: res.msg,
          icon: 'error'
        })
        return;
      }
      this.setData({
        options: res.data
      })
    } catch (error) {
      wx.showToast({
        title: error,
      })
    }
  },
  onFinish(e) {
    console.log(e.detail);
    const {
      selectedOptions,
      value
    } = e.detail;
    const area = selectedOptions
      .map((option) => option.text || option.name)
      .join('/');
    console.log(area);
    app.userInfo.address_name = area
    app.userInfo.adress_ID = value
    this.setData({
      userInfo: app.userInfo,
      cascaderValue: value,
      showPopup: false
    });
  },
  // 打开schoolPopup
  async onOpenPopup(e) {
    if (e.currentTarget.dataset.filed == 'college_name' && this.data.userInfo.school_ID == null) {
      wx.showToast({
        title: '请先选择学校！',
        icon: 'error'
      })
      return;
    }
    if (e.currentTarget.dataset.filed == 'class_name' && this.data.userInfo.college_ID == null) {
      wx.showToast({
        title: '请先选择学院！',
        icon: 'error'
      })
      return;
    }
    console.log(e.currentTarget.dataset);
    this.setData({
      operate: e.currentTarget.dataset.filed,
      schoolPopup: true,
      loading: true,
      columns: []
    })
    switch (e.currentTarget.dataset.filed) {
      case 'school_name':
        const data = await getApp().$axios("/getSchoolList", 'GET')
        console.log(data);
        if (data.status !== 200) {
          wx.showToast({
            title: data.msg,
            icon: 'error'
          });
          this.onCloseSchoolPopup();
          return;
        };
        this.setData({
          res_data: data.data
        });
        data.data.forEach(item => {
          this.data.columns.push(item.school_name)
        });
        this.setData({
          columns: this.data.columns,
          loading: false
        });
        break;
      case 'college_name':
        const json = await getApp().$axios("/getCollegeList?id=" + this.data.userInfo.school_ID, 'GET')
        console.log(json);
        if (json.status !== 200) {
          wx.showToast({
            title: json.msg,
            icon: 'error'
          });
          this.onCloseSchoolPopup();
          return;
        };
        this.setData({
          res_data: json.data
        });
        json.data.forEach(item => {
          this.data.columns.push(item.college_name)
        });
        this.setData({
          columns: this.data.columns,
          loading: false
        });
        break;
      case 'class_name':
        let res = await getApp().$axios("/getClassList?id=" + this.data.userInfo.college_ID, 'GET');
        console.log(res);
        if (res.status !== 200) {
          wx.showToast({
            title: res.data || res.msg,
            icon: 'error'
          });
          this.onCloseSchoolPopup();
          return;
        };
        this.setData({
          res_data: res.data
        });
        res.data.forEach(item => {
          this.data.columns.push(item.class_name)
        });
        this.setData({
          columns: this.data.columns,
          loading: false
        });
        break;
    }
  },
  // 确认选中 学校学院职位
  onConfirmSchool(e) {
    const {
      value,
      index
    } = e.detail;
    console.log(value, index);
    app.userInfo[this.data.operate] = value
    // id
    let id = (this.data.operate).split('_').slice(0, 1);
    id.push('ID')
    app.userInfo[id.join("_")] = this.data.res_data[index].id;
    this.setData({
      userInfo: app.userInfo,
      schoolPopup: false
    })
  },
  // 关闭
  onCloseSchoolPopup() {
    this.setData({
      schoolPopup: false,
      loading: false,
      columns: []
    })
  },
  // 性别
  onChangeSex(e) {
    console.log(e.detail);
    let sex = e.detail;
    app.userInfo.sex = sex;
    this.setData({
      'userInfo.sex': sex
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    app.userInfo.identity_ID = 1
    this.setData({
      userInfo: app.userInfo
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})